package com.faxsun.core.service;

import java.util.Date;
import java.util.List;

import mtons.modules.pojos.Page;

import com.faxsun.core.persist.entity.LiveMsgPO;
import com.faxsun.core.persist.entity.LivePO;
import com.faxsun.core.persist.entity.UserPO;

public interface LiveMsgService {
    
    public static final String bookPageToken = "#@booKPagiE_";
    //public static final int bookPageTextLen = 100;
    
    LiveMsgPO findById(Long msgid);

	/**
	 * 保存直播图文消息
	 * 
	 * @param entity
	 * @return 实体本身；如果参数有错误，返回为null
	 */
	public LiveMsgPO save(LiveMsgPO entity);

	/**
	 * 按页查询直播消息
	 * 
	 * @param page
	 * @param channelId
	 *            频道id
	 * @param startMsgId
	 *            开始消息id，可为0，为0时，查询最近的n条消息，n在page中设置。<br>
	 *            startMsgId>0, 查询id小于startMsgId的n条消息
	 * @return
	 */
	public List<LiveMsgPO> listPage(Page page, long channelId, long startMsgId);

    /**
     * 返回直播所有消息，并整理成文字和图片分离的列表，
     * 即列表中每个string将包含时间(可选)+bookPageToken+文字/图片url
     * 
     * @param channelId 频道id
     * @param livePO
     * @param admin
     * @return
     */
    public List<String> getFinalBookPages(long channelId, LivePO livePO, UserPO admin);

	/**
	 * 按页查询最新的直播消息
	 * 
	 * @param page
	 * @param channelId
	 *            频道id
	 * @param startMsgId
	 *            开始消息id，可为0或负数，此时，查询最新的n条消息，n在page中设置<br>
	 *            startMsgId>0, 查询id大于startMsgId的所有最新消息
	 * @return
	 */
	public List<LiveMsgPO> listNewMsg(Page page, long channelId, long startMsgId);
	
	/**
	 * 验证channelId是否合法或存在
	 * @param channelId
	 * @return
	 */
	public boolean isValideChannelId(String channelId);
	
	/**
	 * 根据channelId获取直播实体
	 * @param channelId
	 * @return
	 */
	public LivePO findChannelById(long channelId);
    
    /**
     * 根据channelId获取直播消息日期列表
     * @param channelId
     * @return
     */
    public List<Date> findMsgDateById(long channelId);
    
    public void incrementThumbup(long channelId);
    
    public void decrementThumbup(long channelId);
    
    public void incrementComment(long channelId);
    
    public void decrementComment(long channelId);
}
